    #include <vector> 
    #include <iostream> 
    using namespace std;
    class testDemo
    {
    public:
        testDemo(int num):num(num){
            std::cout << "调用构造函数" << endl;
        }
        testDemo(const testDemo& other) :num(other.num) {
            std::cout << "调用拷贝构造函数" << endl;
        }
        testDemo(testDemo&& other) :num(other.num) {
            std::cout << "调用移动构造函数" << endl;
        }
    private:
        int num;
    };
    int main(void)
    {
        cout << "emplace_back:" << endl;
        std::vector<testDemo> demo1;
        demo1.emplace_back(2);  
        cout << "push_back:" << endl;
        std::vector<testDemo> demo2;
        demo2.push_back(2);
		
		return 0;
    }
	
	//编译：g++ vector_test.cpp -std=c++11 -fno-elide-constructors   -o vector_test.out

	/*
	    结论：
		
	    由此可以看出，push_back() 在底层实现时，会优先选择调用移动构造函数，如果没有才会调用拷贝构造函数。

		显然完成同样的操作，push_back() 的底层实现过程比 emplace_back() 更繁琐，换句话说，emplace_back() 的执行效率比 push_back() 高。因此，在实际使用时，建议大家优先选用 emplace_back()。

		由于 emplace_back() 是 C++ 11 标准新增加的，如果程序要兼顾之前的版本，还是应该使用 push_back()。
	*/